草庐IT

Python property、setter、deleter

全部标签

c++ - 我是否负责在 QImage::bits() 函数提供的指针上调用 delete?

Qt类QImage有两个版本的bits()函数,返回指向底层图像数据的指针。一个是const,另一个不是。这是thedocumentation对于非常量版本:Returnsapointertothefirstpixeldata.ThisisequivalenttoscanLine(0).NotethatQImageusesimplicitdatasharing.Thisfunctionperformsadeepcopyofthesharedpixeldata,thusensuringthatthisQImageistheonlyoneusingthecurrentreturnvalue

c++ - 在 Vim 中为 C++ 类创建 getter 和 setter 成员

我正在创建一个包含许多double(或其他类型,类型无关紧要)成员的类。classCalcParameters{public:CalcParameters(){}~CalcParameters(){}//gettersandsettershereprivate:double_param1;double_param2;...};是否可以在Vim中编写一个脚本来为每个参数自动生成公共(public)getter和setter?喜欢doubleparam1()const{return_param1;}voidsetParam1(doubleparam1){_param1=param1;}..

c++ - 通过引用与通过值传递指向函数的指针,以及在指针链上使用 delete

假设我这样做:voidfunc(int*&refptr){*refptr=7;}int*ptr=newint;func(ptr);现在,如果我不使用引用运算符,在func中不会完成完全相同的事情吗?无论哪种方式,您都在堆中访问相同的int值,那么一种方式比另一种方式更可取吗?是否应该仅在您尝试更改指针...指向的位置时才使用引用运算符?我不清楚这一点,我的教授也没有帮助。:(我的另一个问题与删除运算符有关。假设我有:int**ptr=newint*;ptr*=newint;如果我想释放堆中分配的所有内存,我可以只对ptr使用delete一次,还是必须先删除ptr*然后再删除ptr?非常

c++ - dll 的 new 和 delete 运算符重载

如何为dll重载new和delete运算符。我已经将重载运算符作为dll的一部分编写,但是与此dll链接的客户端不使用overloadednewanddelete 最佳答案 这是C++标准在第17.6.4.6/3节中对此的说明:Theprogram'sdefinitions(ofthenew/deleteoperators)areusedinsteadofthedefaultversionssuppliedbytheimplementation.Suchreplacementoccurspriortoprogramstartup.T

c++ - std::runtime_error 子类的 "call to deleted constructor of"编译器错误

我从std::runtime_error派生了一个异常类,以便添加对异常流的支持。我收到一个奇怪的编译器错误输出,我不确定如何解决?clang++-std=c++11-stdlib=libc++-g-Wall-I../-I/usr/local/includeMain.cpp-cMain.cpp:43:19:error:calltodeletedconstructorof'EarthException'throwEarthException(__FILE__,__LINE__)^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~../EarthExce

c++ - 如何解决同时设置成员的 setter/getter ?

我正在处理类似的事情:我有一个非常复杂的类和一个依赖于一些东西的成员,这些东西在类初始化时没有设置,或者在运行时设置。即使未设置该成员,该类的对象也有意义。它也可以根据对其他成员所做的其他更改进行重置。现在,假设这个“特殊”成员的设置在计算上是昂贵的,所以我会根据要求延迟计算它。所以:classClass{Xx;Yy;SpecialClassspecialObject;public:voidsetX(constX&newX);voidsetY(constY&newY);//----SpecialClassgetSpecialObject()/*const*/{computeSpecia

c++ - c++ 中的 malloc/free 和 new/delete 兼容性?

malloc/free和new/delete有一个很好的比较here,以及malloc()和free()如何工作的很好的解释here.显然,我们不会混合使用它们-将free与new一起使用或将delete与malloc一起使用。我们可以看到很多开源项目,有很多贡献者,使用这两种机制,同时遵守上述“禁止混合”规则。通常,您在一个文件中只有一种方式(一位作者,一种偏好)。我已经fork了这样一个项目,我正在使用new/delete添加一些功能。但是我遇到了一些奇怪的内存损坏。当然,我可能对他们负责,但是.....这让我问了一些“幼稚”的问题:我可以在同一个编译单元(*.o)中同时使用mal

c++ - C++ 中静态类变量的静态或非静态 getter/setter

假设我有以下类(class):classA{private:staticdoubleX;};doubleA::X=0.0;变量A::X实际上应该是静态的,因为A的所有实例必须在我所关注的上下文中共享相同的值A::X。现在,我的问题是是否将A::X的getter和setter函数设为静态。它们将被这样定义:voidA::setValue(constdoublex){#pragmaompcritical{if(x1.0)//custommacrocalltoraiseexceptionX=x;}}doubleA::getValue(){#pragmaompcritical{returnX;

c++ - 在什么情况下 delete 运算符会抛出错误?

在我的链表实现中,删除内部类Node实例的辅助函数deleteNode(Node*)抛出运行时错误,通过“触发断点”在VS2015的本地Windows调试器中。我小心地匹配我的new和delete运算符。范围/引用是否发挥了我没有意识到的作用?即使clear()中存在逻辑错误并且deleteNode()被传递给nullptr,它也不应该抛出错误删除nullptr,然后将nullptr赋值给自己吧?该删除有什么问题?classLinkedList{public:LinkedList():head(nullptr){}~LinkedList(){clear();}voidpush_fron

c++ - delete[] 运算符是否处理通过指针返回的动态分配的内存?

我想知道delete[]运算符如何处理函数返回的指针,而不是在与delete语句相同的范围内进行动态分配。假设我有一个像这样的简单函数:int*getArray(){int*returnVal=newint[3];returnVal[0]=returnVal[1]=returnVal[2]=0;returnreturnVal;}现在,当我需要在代码中使用该数组时,我会执行以下操作:int*vals=getArray();//usevalues...delete[]vals;但是,我想知道,C++编译器如何知道分配的内存块有多大(以及要从vals中删除多少内存元素)?这是一种有效的技术,